/**
 * 
 */
package fr.gfi.agraf.vue.action.tableau;

import java.util.List;
import java.util.Map;

import fr.gfi.agraf.service.ITdbService;
import fr.gfi.agraf.utils.PropertiesUtils;
import fr.gfi.agraf.utils.SpringFactory;
import fr.gfi.agraf.vue.action.AbstractApplicationSupportAction;
import fr.gfi.agraf.vue.bean.ActiviteDTO;
import fr.gfi.agraf.vue.bean.PerimetreDTO;
import fr.gfi.agraf.vue.bean.TacheDTO;
import fr.gfi.agraf.vue.bean.TdBFront;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria
 * 
 */
public class VoirTableauDeBordAction extends AbstractApplicationSupportAction {

	/**
	 * Généré par Java
	 */
	private static final long serialVersionUID = 6004191956476010084L;

	private static final String TDB_SERVICE = "TdbService";

	private static final int LARGEUR_PIXELS_TAUX_PRODUCTIVITE = 400;

	private static final String ID_USER_PARAMETRE = "idUser";

	private int tauxProductivite;

	private String libelleResumeGeneral;

	private Map<ActiviteDTO, List<TacheDTO>> mapActiviteEnCours;

	private List<UtilisateurDTO> listeUtilisateur;

	private UtilisateurDTO utilisateurChoisi;

	private Map<PerimetreDTO, Map<ActiviteDTO, List<TacheDTO>>> mapPerimetreTachesTerminees;

	@Override
	public String executeAction() throws Exception {

		final ITdbService tdbService = (ITdbService) SpringFactory.getApplicationContext().getBean(
				TDB_SERVICE);

		Long idUser;
		try {
			idUser = Long.valueOf(getServletRequest().getParameter(ID_USER_PARAMETRE));
		} catch (final NumberFormatException e) {
			idUser = getUtilisateurConnecte().getId();
		}

		final TdBFront tdbFront = tdbService.getStatsForTdb(idUser, getUtilisateurConnecte().getId());

		tauxProductivite = tdbFront.getTauxProductivite();

		libelleResumeGeneral = tdbFront.getLibelleResumeGeneral();

		mapActiviteEnCours = tdbFront.getMapActiviteEnCours();

		listeUtilisateur = tdbFront.getListeAllUtilisateurs();

		utilisateurChoisi = tdbFront.getUtilisateurChoisi();

		mapPerimetreTachesTerminees = tdbFront.getMapPerimetreTachesTerminees();

		return SUCCESS;
	}

	/**
	 * Renvoie true si l'utilisateur possede les droits sur le composants de
	 * select
	 * 
	 * @return
	 */
	public boolean isSelectUser() {
		return existComposantIhm(Long.parseLong(PropertiesUtils.getProperty("composant.VoirTdBUtilisateurs")));
	}

	/**
	 * Renvoi la classe css pour l'effet sur le taux de productivité
	 */
	public String getClassCssTauxProduct() {
		String output = "";
		if (tauxProductivite < 0) {
			// Théoriquement impossible
			output = "erreurTaux";
		} else if (tauxProductivite >= 0 && tauxProductivite < 50) {
			output = "divRouge";
		} else if (tauxProductivite >= 50 && tauxProductivite < 70) {
			output = "divOrange";
		} else if (tauxProductivite >= 70 && tauxProductivite < 100) {
			output = "divJaune";
		} else if (tauxProductivite >= 100) {
			output = "divVerte";
		} else {
			// Théoriquement impossible
			output = "erreurTaux";
		}

		return output;
	}

	/**
	 * Renvoie la largeur en pixel de la div encadrant le taux de productivité
	 * (+2 pour la bordure)
	 * 
	 * @return
	 */
	public int getLargeurProductTotal() {
		return LARGEUR_PIXELS_TAUX_PRODUCTIVITE + 2;
	}

	/**
	 * Renvoie la largeur de la div contenant le taux de productivité
	 * 
	 * @return
	 */
	public int getWidthTauxProduct() {
		if (tauxProductivite > 100) {
			return LARGEUR_PIXELS_TAUX_PRODUCTIVITE;
		}
		return tauxProductivite * LARGEUR_PIXELS_TAUX_PRODUCTIVITE / 100;
	}

	/**
	 * @return the tauxProductivite
	 */
	public int getTauxProductivite() {
		return tauxProductivite;
	}

	/**
	 * @param tauxProductivite
	 *            the tauxProductivite to set
	 */
	public void setTauxProductivite(final int tauxProductivite) {
		this.tauxProductivite = tauxProductivite;
	}

	/**
	 * @return the libelleResumeGeneral
	 */
	public String getLibelleResumeGeneral() {
		return libelleResumeGeneral;
	}

	/**
	 * @return the mapActiviteEnCours
	 */
	public Map<ActiviteDTO, List<TacheDTO>> getMapActiviteEnCours() {
		return mapActiviteEnCours;
	}

	/**
	 * @return the listeUtilisateur
	 */
	public List<UtilisateurDTO> getListeUtilisateur() {
		return listeUtilisateur;
	}

	/**
	 * @return the utilisateurChoisi
	 */
	public UtilisateurDTO getUtilisateurChoisi() {
		return utilisateurChoisi;
	}

	/**
	 * @return the mapPerimetreTachesTerminees
	 */
	public Map<PerimetreDTO, Map<ActiviteDTO, List<TacheDTO>>> getMapPerimetreTachesTerminees() {
		return mapPerimetreTachesTerminees;
	}

}
